package org.csu.mybigpro.service.impl;

import org.csu.mybigpro.service.FileService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Service
public class FileServiceImpl implements FileService {

    @Override
    public String saveFile(MultipartFile file) {
        try {
            // 获取项目根目录：适配任何操作系统
            String basePath = System.getProperty("user.dir"); // 如 D:/projects/teacher_center_platform
            String uploadDir = basePath + File.separator + "uploads" + File.separator + "resources";

            // 创建上传目录（如果不存在）
            File dir = new File(uploadDir);
            if (!dir.exists()) {
                System.out.println("创建目录: " + uploadDir);
                dir.mkdirs(); // 自动创建多级目录
            }

            // 生成唯一文件名，避免重复
            String originalFilename = file.getOriginalFilename();
            // 确保文件名中不包含路径分隔符，只取文件名本身
            if (originalFilename.contains(File.separator)) {
                originalFilename = originalFilename.substring(originalFilename.lastIndexOf(File.separator) + 1);
            }
            // 处理文件名中的非法字符，或者简单地使用 UUID + 原始扩展名
            String extension = "";
            int dotIndex = originalFilename.lastIndexOf('.');
            if (dotIndex > 0 && dotIndex < originalFilename.length() - 1) {
                extension = originalFilename.substring(dotIndex); // 包括点
            }
            String fileName = UUID.randomUUID() + extension; // 只保留UUID和原始扩展名

            // 创建目标文件
            File destFile = new File(dir, fileName);
            file.transferTo(destFile); // 写入文件

            // 返回相对路径（用于前端下载或数据库保存）
            return "uploads/resources/" + fileName;

        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("文件上传失败", e);
        }
    }

    @Override
    public boolean deleteFile(String relativePath) {
        try {
            // 构造完整路径：项目根目录 + 相对路径
            // 注意：relativePath可能来自数据库，其中路径分隔符可能是 /，需要转换为当前操作系统的分隔符
            String absolutePath = System.getProperty("user.dir") + File.separator + relativePath.replace("/", File.separator);
            File file = new File(absolutePath);

            // 存在则删除
            if (file.exists()) {
                return file.delete();
            }
            return false; // 文件不存在
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}